<!-- 公共标签 -->

<template>
  <div class="CommonTag" :style="tagStyle" @click="toClick">
    <span>{{ tagDict[0] || '标签' }}</span>
    <i v-if="closable" class="el-icon-error" @click="toClose" />
  </div>
</template>

<script>
// ============================== 导入依赖 ============================== //

import props from './props'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'CommonTag',

  /**
   * 属性注册 (抽取以便查阅)
   */
  props,

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 标签字典
     */
    tagDict() {
      const obj = this.obj || {}
      const name = this.name || obj.name
      const color = this.color || obj.color
      const bgColor = this.bgColor || obj.bgColor
      const borderColor = this.borderColor || obj.borderColor || (this.noBorder ? bgColor : color)
      return [name, color, bgColor, borderColor]
    },

    /**
     * 标签样式
     */
    tagStyle() {
      const [, color, bgColor, borderColor] = this.tagDict
      return color && bgColor ? { color, backgroundColor: bgColor, borderColor } : null
    },
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 点击事件
     */
    toClick() {
      this.$emit('click', this.tagDict)
    },

    /**
     * 关闭事件
     */
    toClose() {
      this.$emit('close', this.tagDict)
    },
  },
}
</script>

<style lang="scss">
@import './index.scss';
</style>
